7.3 分组之索引分组
df.groupby()函数不但可以对指定列实现分组,也可以对分层索引可以做分组。
1、按分层索引标签分组
在具有分层索引的表格中,如果以指定的某列数据为分组依据执行分组,则将分层索引标签写入元组中。
2、按索引层级不处理分组
如果按指定索引层级分组,则在level参数写入分层索引的标题即可。
3、按索引层级处理后分组
如果对指定层级的值处理后再分组,则可以在level参数中指定索引层级,然后在by参数中以函数方式处理层级,其处理结果就是分组的依据
1、 列数据与指定层级共存分组
如果将列数据处理结果与分层索引数据处理的结果共同做为分组依据,那么在by参数就是分组的依据。
以下为第4点为例:
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.7.03 分组之索引分组.xlsx" , header =[ 0,1 ], index_col =[ 0,1 ])
print (df)
for t,d in df.groupby(by=[
df.iloc[:,: 2 ].sum( axis = 1 )> 170 , #对全年分数大于170的进行分组
lambda s:len(s[0]) #对索引第一级的长度进行分组
]):
print (t)
print (d)
print ("----------------------------")
返回:
全年 | 等级 | |||||
---|---|---|---|---|---|---|
下半年 | 下半年.1 | 上半年 | 下半年 | 全年 | ||
地区 | 软件 | |||||
上海 | Maya-动画 | 82 | 93 | 中 | 中 | 中 |
keynote-办公 | 73 | 116 | 差 | 优 | 优 | |
石家庄 | AI-设计 | 73 | 81 | 差 | 中 | 差 |
PS-设计 | 118 | 63 | 优 | 差 | 优 | |
北京 | PPT-办公 | 86 | 105 | 中 | 优 | 优 |
Excel-办公 | 76 | 83 | 差 | 中 | 差 | |
3DS MAX-动画 | 86 | 59 | 中 | 差 | 差 |
(False, 2)
全年 | 等级 | |||||
---|---|---|---|---|---|---|
下半年 | 下半年.1 | 上半年 | 下半年 | 全年 | ||
地区 | 软件 | |||||
北京 | Excel-办公 | 76 | 83 | 差 | 中 | 差 |
3DS MAX-动画 | 86 | 59 | 中 | 差 | 差 |
----------------------------
(False, 3)
全年 | 等级 | |||||
---|---|---|---|---|---|---|
下半年 | 下半年.1 | 上半年 | 下半年 | 全年 | ||
地区 | 软件 | |||||
石家庄 | AI-设计 | 73 | 81 | 差 | 中 | 差 |
----------------------------
(True, 2)
全年 | 等级 | |||||
---|---|---|---|---|---|---|
下半年 | 下半年.1 | 上半年 | 下半年 | 全年 | ||
地区 | 软件 | |||||
上海 | Maya-动画 | 82 | 93 | 中 | 中 | 中 |
keynote-办公 | 73 | 116 | 差 | 优 | 优 | |
北京 | PPT-办公 | 86 | 105 | 中 | 优 | 优 |
----------------------------
(True, 3)
全年 | 等级 | |||||
---|---|---|---|---|---|---|
下半年 | 下半年.1 | 上半年 | 下半年 | 全年 | ||
地区 | 软件 | |||||
石家庄 | PS-设计 | 118 | 63 | 优 | 差 | 优 |
----------------------------